<!DOCTYPE html>
<!--
  The html/js to help testing keyboard events. It
  - receives keyboard events and preventDefault(),
  - writes the key codes to /html/body/div[@id='container'],
  - sends the key codes to window.domAutomationController once KeyX is received.
-->
<html>
  <head>
    <title>Fullscreen Keyboard Lock Test</title>
    <script>
      let x_pressed = false;
      let report_called = false;
      let prevent_default = true;

      function processResult() {
        if (x_pressed && report_called) {
          window.domAutomationController.send(container().innerHTML);
        }
      }

      function getKeyEventReport() {
        report_called = true;
        processResult();
      }

      function isMacOSFullscreenShortcut(e) {
        return e.metaKey &&
               e.ctrlKey &&
               !e.altKey &&
               !e.shiftKey &&
               e.code == "KeyF";
      }

      function isF11FullscreenShortcut(e) {
        return !e.metaKey &&
               !e.ctrlKey &&
               !e.altKey &&
               !e.shiftKey &&
               e.code == "F11";
      }

      function isBrowserFullscreenShortcut(e) {
        return isMacOSFullscreenShortcut(e) ||
               isF11FullscreenShortcut(e);
      }

      function container() {
        return document.getElementById('container');
      }

      function consumeEvent(type, e) {
        if (type == 'keydown' &&
            !e.code.startsWith("Control") &&
            !e.code.startsWith("Shift") &&
            !e.code.startsWith("Alt") &&
            !e.code.startsWith("Meta")) {
          container().innerHTML +=
              e.code +
              ' ctrl:' + e.getModifierState('Control') +
              ' shift:' + e.getModifierState('Shift') +
              ' alt:' + e.getModifierState('Alt') +
              ' meta:' + e.getModifierState('Meta') + '\n';
        }
        if (prevent_default) {
          e.preventDefault();
        }
      }

      function init() {
        document.addEventListener('keydown', (e) => {
          // The web content triggers fullscreen on the "S" key down event.
          if (e.code == 'KeyS') {
            container().webkitRequestFullscreen();
          } else if (isBrowserFullscreenShortcut(e)) {
            // Web page can consume fullscreen shortcut when the page is in
            // window mode, but it's not expected in test cases.
            return;
          } else if (e.code == 'KeyD') {
            // Disable prevent default behavior.
            prevent_default = false;
          }
          consumeEvent('keydown', e);
        });

        document.addEventListener('keyup', (e) => {
          if (isBrowserFullscreenShortcut(e)) {
            return;
          }
          consumeEvent('keyup', e);

          if (e.code == 'KeyX') {
            x_pressed = true;
            processResult();
          }
        });

        document.addEventListener('keypress', (e) => {
          consumeEvent('keypress', e);
        });
      }
    </script>
  </head>
  <body onload='init()'>
    <div id='container'>
    </div>
  </body>
</html>
